// 引入
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieSession = require('cookie-session');
var logger = require('morgan');
var multer = require('multer');
var app = express();

// 中间件的配置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({
  extended: false
}));
// cookieSession的配置
app.use(cookieSession({
  name: 'top-news',
  keys: ['aaaaa', 'bbb', 'ccc'],
  maxAge: 1000 * 60 * 60 * 60 * 24 // 过期时间24h 单位毫秒
}))

// multer的配置
// 分配请求文件位置
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // req：请求体 req.files是数组
    // 判断为注册请求
    if (req.url.indexOf("register") !== -1) {
      // 用磁盘路径去拼接文件地址
      cb(null, path.join("public", "upload", "user"))
    } else if (req.url.includes("banner")) {
      cb(null, path.join("public", "upload", "banner"))
    }
  }
})

// 实例化 multer 
// multer对上传图片的格式是有要求的
let objMulter = multer({
  storage
}); //dest: 指定 保存位置（存到服务器)
// 安装中间件multer
app.use(objMulter.any()); //允许上传什么类型文件,any 代表任何类型 

// 静态资源的托管
// 默认访问index.html,express底层这样设置的
// 客户端
app.use(express.static(path.join(__dirname, 'public/template')));
// 管理端
// 通过带有 /admin 前缀地址来访问 public 目录中的文件
app.use("/admin", express.static(path.join(__dirname, "public/admin")));
app.use("/user", express.static(path.join(__dirname, "public/upload/user")));

// 接口的响应

// 客户端
// 用all来截获所有请求
app.all('/api/*', require("./utils/parms"));

app.use('/api/public/login', require("./routes/api/public/login"));
app.use('/api/public/register', require("./routes/api/public/register"));
app.use('/api/public/autoLogin', require("./routes/api/public/autoLogin"));

// 动态接口
// 推荐接口的主入口
app.use('/api/rec/main', require("./routes/api/recommend/main"));

// 校验token的接口
app.use('/api/public/isToken', require("./routes/api/public/isToken"));

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;